rev 13/10/2023

Test Eeprom I2C 24C32 (32ko adressage 16 bits) & 18F27K42

HARDWARE :
Pour ce test , j'utilise ma Base 18F27K42
Alimentation : bloc secteur 9V + alim DC/DC 5V
Terminal YAT PC 115200 bds ...sur UART1 RC6 TX et RC7 RX , ...via un cordon prolific TTL/USB
Pickit4 MPLAB pour le chargement du programme
MPLAB IDE et XC8
Liaison I2C1 (hardware) : sur RC3 SCL et RC4 SDA
Module RTC DS231
LCD 4x20 chars en liaison I2C via un pigback PCF8574 (interface 8 sorties en I2C)
Analyser logique 4 voies 50Mhz , IKALOGIC SQA 50

Particularité : I2C du 18F27K42 TRES Specifique .

Mes premiers essais ont été laborieux, car effet de bord avec traitement du LCD ..
car j'utilisais une portion de table en RAM commune entre LCD et EEPROM ..
Table tmp[ ] déclarée comme globale , en RAM .
Probleme difficile à cerner SANS analyser logique ...montrant une valeur intruse dans la sequence I2C d'ecriture en Eeeprom..
et ce, malgré l'init prealable et complete de la table utilisée

tmp[0]='1'; // si LCD utilisé
tmp[1]='2'; // ecriture de 34567 avec 1 et 2 remplacés par intrus 0x29 et 0x00
tmp[2]='3'; // si LCD utilisé
tmp[3]='4';
tmp[4]='5';
tmp[5]='6';
tmp[6]='7';
tmp[7]=0;
tmp[8]=0;
tmp[9]=0;
p1=&tmp[0];

CPrint(" Ecriture dans Eeprom 24C32 à l'adresse 320 de :\r\n");
Print(p1);CRLF1();
__delay_xSec(2);

// ======
probleme dans cette zone because tmp etait commune avec eeprom =========
Addr=LCD_ADDR;
LCD_Cmd(LCD_CLEAR);
LCD_Write_CText_At(1,1,"Ecriture Eeprom24C32");
__delay_xSec(2);

//=============================================/

Addr=EEPROM_24C32_ADDR_7b;
SQA=1;
I2cWrite_16(Addr,320,tmp,8);
SQA=0;
__delay_xSec(4);

Problem au niveau ecriture :

L'analyser montre le probleme

images/t_PB_ecriture_24C32_si_usage_LCD.gif

modif de la fonction primaire d'ecriture dans le PCF8574 ( LCD)

void I2C_PCF8574_Write(unsigned char Adrp,unsigned char value)
{
char
tmpx[3];
............................... table tmpx[] locale au lieu de tmp[ ] globale
tmpx[0]=value;
tmpx[1]=0;
I2C1_WriteNBytes(Adrp, tmpx, 1);
__delay_us(30);
}


Test lecture Eeprom (apres écriture)

images/t_lecture_24C32_adresse_320_Ok_avec_LCD.gif
OK

sortie sur Terminal YAT

Version 2023-1012
Programme de Test sur Eeeprom 24C32 du module RTC DS3231
( et avec LCD I2C PCF8574)
Init_I2C() à 100Khz;
Test presence devices sur Bus I2C1
@ decimal # 78 soit @Device 7bits = 0X27 PCF8754 for LCD 2x16cars
@ decimal # 174 soit @Device 7bits = 0X57 EEPROM 512bytes
@ decimal # 208 soit @Device 7bits = 0X68 RTC DS3231


#1 Active sortie RTC SQW=1Hz ... OK

adresse LCD= 39 soit 0X27
Sequence d'Init LCD 4x20 via I2C1 PCF8574 : .123456789A
LCD Bleu sur Breadboard adresse 7bits 0x27 !
Chargement caracteres Speciaux en CGRAM

Ecriture dans Eeprom 24C32 à l'adresse 320 de :
1234567
Etat tmp[], 1234567 apres ecriture dans eeprom
tmp[0]=49 0X31 tmp[1]=50 0X32

Lecture de 8 bytes, depuis l'adresse 320 Eeprom 24C32
Resultat lecture:
1234567
tmp[0]= 49 0x31 , tmp[1]= 50 0x32
Jeudi 12/10/23 18H13M44S
Jeudi 12/10/23 18H13M49S
Jeudi 12/10/23 18H13M53S

à suivre : test vitesse ecriture par page ....


Software : (MPLAB XC8)
Pack Projet : 18F27K42_Test_I2C_24C32_2023-1013.zip
source XC8 : main_test_24C32_18F27K42_X.c
chargeur :_18F27K42_Test_I2C_24C32_2023-1013.X.hex



 

 


paulfjujo@free.fr